﻿using StockholmsStad.Data.DatabaseAgents;
using StockholmsStad.Data.Interfaces;

namespace StockholmsStad.Data
{
    /// <summary>
    /// Fabrik för att få tag på databasagenterna
    /// </summary>
    public class AgentFactory : IAgentFactory
    {
        #region public agents

        /// <summary>
        /// Returnerar agent för hantering av tickets
        /// </summary>
        /// <returns></returns>
        public ITicketAgent GetTicketAgent()
        {
            return new TicketAgent();
        }

        /// <summary>
        /// Returnerar agent för att hantera ceremoni
        /// </summary>
        /// <returns></returns>
        public ICeremonyAgent GetCeremonyAgent()
        {
            return new CeremonyAgent();
        }

        /// <summary>
        /// Returnerar agent för att hantera personer, ska ej användas utanför datalager
        /// </summary>
        /// <returns></returns>
        public IPersonAgent GetPersonAgent()
        {
            return new PersonAgent();
        }

        /// <summary>
        /// Returnerar agent för att hantera par
        /// </summary>
        /// <returns></returns>
        public ICoupleAgent GetCoupleAgent()
        {
            return new CoupleAgent();
        }

        /// <summary>
        /// Returnerar agent för att hantera användare i systemet
        /// </summary>
        /// <returns></returns>
        public IUserAgent GetUserAgent()
        {
            return new UserAgent();
        }

        /// <summary>
        /// Returnerar agent för att lägga till och ta bort språk
        /// </summary>
        /// <returns></returns>
        public ILanguageAgent GetLanguageAgent()
        {
            return new LanguageAgent();
        }


        /// <summary>
        /// Returnerar agent för att hantera bokningar av tider
        /// </summary>
        /// <returns></returns>
        public IBookingAgent GetBookingAgent()
        {
            return new BookingAgent();
        }

        /// <summary>
        /// Returnerar agent för att administrera förättare
        /// </summary>
        /// <returns></returns>
        public IMinisterAgent GetMinisterAgent()
        {
            return new MinisterAgent();
        }

        /// <summary>
        /// Returnerar agent för att administrera förättare
        /// </summary>
        /// <returns></returns>
        public IMaintenanceAgent GetMaintenanceAgent()
        {
            return new MaintenanceAgent();
        }

        /// <summary>
        /// Returnerar agent för att administrera egenskaper och värden för systemet
        /// </summary>
        /// <returns></returns>
        public IPropertiesAgent GetPropertiesAgent()
        {
            return new PropertiesAgent();
        }

        #endregion
    }
}